package model

import (
	"context"
	"ginblog/utils"
	"ginblog/utils/errormsg"
	"mime/multipart"

	"github.com/qiniu/go-sdk/v7/auth/qbox"
	"github.com/qiniu/go-sdk/v7/storage"
)

var AccessKey = utils.AccessKey
var SecretKey = utils.SecretKey
var Bucket = utils.Bucket
var ImgUrl = utils.QiniuServer

// 上传到七牛云中的配置 引入七牛云的SDK
func UploadFile(file multipart.File, fileSize int64) (string, int) {
	// 保存到对应的Bucket空间
	putPolicy := storage.PutPolicy{
		Scope: Bucket,
	}
	// 根据对应额ak和sk得到一个mac地址（SDK提供的能力）
	mac := qbox.NewMac(AccessKey, SecretKey)
	// 根据这个mac生成一个上传的token（SDK提供的能力）
	upToken := putPolicy.UploadToken(mac)
	// 确定上传的config 主要是上传到哪个区域
	cfg := storage.Config{
		Zone:          &storage.ZoneHuabei,
		UseHTTPS:      false,
		UseCdnDomains: false,
	}
	// 构建一个表单的上传对象
	putExtra := storage.PutExtra{}
	formUpLoader := storage.NewFormUploader(&cfg)
	// 传入对应的参数得到上传完成之后的回复
	ret := storage.PutRet{}
	err := formUpLoader.PutWithoutKey(context.Background(), &ret, upToken, file, fileSize, &putExtra)
	if err != nil {
		return "", errormsg.ERROR
	}
	// 根据回复是通过对上传的文件的一个hash来得到对应的key作为资源表示 通过和url拼接得到对应的图片的保存地址
	url := ImgUrl + ret.Key
	return url, errormsg.SUCCESS
}
